home *** CD-ROM | disk | FTP | other *** search
- {
-
- Demonstration program for the TSolver component
-
- Shows:
- - user-edited expressions
- - ParseAndSolve method
- - user-defined functions
- - no arguments
- - fixed number of arguments
- - variable number of arguments
- - how to display results
- - how to display error messages and locations
-
- }
-
- unit Testc1;
-
- interface
-
- uses
- SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
- Forms, Dialogs, solver, StdCtrls, ExtCtrls, Gauges;
-
- type
- TForm1 = class(TForm)
- Solver1: TSolver;
- EquMemo: TMemo;
- ResultMemo: TMemo;
- btnSolve: TButton;
- pnlError: TPanel;
- procedure btnSolveClick(Sender: TObject);
- procedure Solver1FunctionCall(Sender: TObject; index: Integer;
- params: PRealArray; NumParams: Integer; var OK: Boolean;
- var result: Double);
- private
- { Private declarations }
- procedure DisplayError;
- public
- { Public declarations }
- end;
-
- var
- Form1: TForm1;
-
- implementation
-
- {$R *.DFM}
-
- function LineToOffset(memo: TMemo; line: integer): integer;
- var i: integer;
- begin
- result:=0;
- if line >= memo.lines.count then
- result:=memo.GetTextLen else
- for i:=1 to line do
- inc(result,length(memo.lines.strings[i-1])+2);
- end;
-
- procedure TForm1.btnSolveClick(Sender: TObject);
- var i: integer;
- begin
- pnlError.Caption:='';
- with Solver1 do
- begin
- Equations.Assign(EquMemo.Lines);
- ResultMemo.Clear;
- ExpressionsOnly:=true;
- if ParseAndSolve then
- begin
- for i:=0 to NumVariables-1 do
- if Known[i] then
- ResultMemo.Lines.Add(Format('%6.4f', [Value[i]])) else
- ResultMemo.Lines.Add('');
- end else
- DisplayError;
- end;
- end;
-
- procedure TForm1.DisplayError;
- var p: TPoint;
- begin
- p:=Solver1.ErrorPos;
- if p.x < 0 then p.x:=0;
- if p.y >= 0 then
- begin
- EquMemo.SelStart:=LineToOffset(EquMemo,p.y)+p.x;
- EquMemo.SelLength:=0;
- end;
- EquMemo.SetFocus;
- pnlError.Caption:=Solver1.ErrorString;
- Messagebeep($FFFF);
- end;
-
- procedure TForm1.Solver1FunctionCall(Sender: TObject; index: Integer;
- params: PRealArray; NumParams: Integer; var OK: Boolean;
- var result: Double);
- var i: integer;
- begin
- case index of
- 0: begin
- result:=5;
- end;
- 1: begin
- result:=0;
- for i:=1 to NumParams do
- result:=result+params^[i];
- end;
- 2: begin
- result:=1;
- for i:=1 to NumParams do
- result:=result*params^[i];
- end;
- end;
- end;
-
- end.
-
-